import oModal from '@/components/base/modal/o-modal/index.vue';
import { T_srv, Tsrv, ifs, ts, tvs, vue } from '@/services';

import { N_oInteraction } from '@/types';
import axios from 'axios';
import Sortable from 'sortablejs';
import { Grid, MenuChildOption, MenuFirstOption, RowInfo } from 'vxe-table';
import Clipboard from 'xe-clipboard'; // 剪贴板
import vxeConfig from '../configs/vxetable';
import { I_editor, T_editor } from './editor';
import filterModal from './filter.vue';
import gridFlowchart from './gridFlowchart/index.vue';
import rowEditModal from './rowEditModal.vue';
import oToolbar from './toolbar.vue';
import { N_oBaseGrid } from './types';

interface I_M2OList {
  field: string;
  tTable: string;
  tField: string;
  m2oField: string;
}
interface I_SLCList {
  field: string;
  slcField: string;
}
interface I_storeData {
  resizableData?: Object;
  sortData?: Object;
  visibleData?: Object;
  fixedData?: Object;
}
interface I_tableBehavior {
  id: string;
  type: string;
  storeData: I_storeData;
}
class T_conf {
  /**
   * 固定配置和变量
   */
  // 输入设置
  static importConfig: any = () => {
    return { modes: ['insert', 'covering'] };
  };

  static exportConfig: any = (expFun: Function) => {
    return {
      remote: true,
      exportMethod: expFun,
      // 默认 csv, html, xml, txt 要支持xlsx需要插件 vxe-table-plugin-export-xlsx
      // 导出由后端输出，不需要vxe-table-plugin-export-xlsx,
      // types: ['xlsx'],
      modes: ['selected'] // 'current', 'selected', 'all'
    };
  };

  // 排序设置
  static sortConfig: any = () => {
    return {
      remote: true,
      orders: ['asc', 'desc', 'null'],
      trigger: 'default'
    };
  };

  // 过滤设置
  static filterConfig: any = () => {
    return {
      remote: true, // 由服务器过滤
      iconNone: 'wy-icon wy-shaixuan10', // 无条件时的图标
      iconMatch: 'wy-icon wy-shaixuan10' // 带条件时显示的图标
    };
  };

  // 自带tool，全屏和显示
  static defaultToolbar: any = () => {
    return {
      zoom: true,
      custom: {
        storage: false
      }
    };
  };

  // 默认编辑配置
  static defaultEditConfig: any = (actFun: Function) => {
    return {
      // manual（手动触发方式，只能用于 mode=row）,click（点击触发编辑）,dblclick（双击触发编辑）
      trigger: 'click',
      enabled: true,
      // cell（单元格编辑模式）,row（行编辑模式）
      mode: 'cell',
      // 只对 keep-source 开启有效，是否显示单元格新增与修改状态
      showStatus: true,
      // 只对 keep-source 开启有效，是否显示单元格修改状态
      showUpdateStatus: false,
      // 只对 keep-source 开启有效，是否显示单元格新增状态
      showInsertStatus: false,
      // 是否显示必填字段的红色星号
      showAsterisk: true,
      // 自定义可编辑列的状态图标
      icon: 'none',
      // 当点击非编辑列之后，是否自动清除单元格的激活状态
      autoClear: false,
      // 是否显示列头编辑图标
      showIcon: false,
      // 该方法的返回值用来决定该单元格是否允许编辑
      // activeMethod: actFun 废弃 改用 beforeEditMethod
      beforeEditMethod: actFun
    };
  };

  // 默认style设置
  static defaultTableStyle: any = () => {
    return {
      border: false,
      showHeader: true,
      showFooter: false,
      showToolbar: true,
      showPager: true
    };
  };

  // 默认page配置
  static tablePage: any = () => {
    return {
      total: 0, // 总条数
      currentPage: 1, // 当前页
      pageSize: 30, // 每页大小
      align: 'right', // 对齐方式
      pageSizes: [10, 30, 100, 200, 500, 1000],
      iconPrevPage: 'wy-icon wy-shangyiye1',
      iconJumpPrev: 'wy-icon wy-shangyiye',
      iconJumpNext: 'wy-icon wy-xiayiye',
      iconNextPage: 'wy-icon wy-xiayiye1',
      iconJumpMore: 'wy-icon wy-gengduo',
      layouts: [
        'Sizes',
        'FullJump',
        'PrevJump',
        'PrevPage',
        'Number',
        'NextPage',
        'NextJump',
        'Total'
      ],
      perfect: true, // 配套样式
      autoHidden: false // 当只有一页时自动隐藏
    };
  };

  static customConfig: any = (
    chkFun: Function,
    updateStore: Function,
    restoreStore: Function,
    visibleMethod: Function
  ) => {
    return {
      storage: {
        // 启用显示/隐藏列状态缓存
        visible: true,
        // 启用列宽状态缓存
        resizable: true,
        // 启用列顺序缓存
        sort: true,
        // 启用冻结列状态缓存
        fixed: true
      },

      mode: 'default',
      // 自定义列是否允许列选中的方法，该方法的返回值用来决定这一列的 checkbox 是否可以选中
      checkMethod: chkFun,
      immediate: false, // 列勾选之后是否实时同步
      showFooter: true, // 是否显示底部操作按钮
      // 只对 mode=popup 有效，是否允许自定义排序
      allowSort: true,
      allowVisible: true,

      restoreStore,
      updateStore,

      // // 自定义列是否的方法，该方法的返回值用来决定这一列是否显示
      // visibleMethod: e => {

      //   return false;
      // }
      visibleMethod
    };
  };

  // 当前选中的单元格
  static current: any = () => {
    return {
      rowIndex: 0,
      row: {},
      columnIndex: 0,
      column: {},
      cell: null
    };
  };

  // QBE
  static rule: any = () => {
    return {
      QBE: {
        funName: '',
        fieldName: ''
      }
    };
  };

  // 更新范围
  static scope: any = () => {
    return {
      field: '',
      value: ''
    };
  };

  static linkParent: any = () => {
    return {
      funName: ``,
      rowID: null,
      mainFunName: null
    };
  };

  static copyColunm: any = () => {
    return {
      fromField: '',
      toField: ''
    };
  };

  static operateColunmCfg = (): N_oBaseGrid.I_operateColumnConfig => {
    return {
      display: new Set<string>().add(Tsrv.globalVar.fieldName.ID),
      usable: new Set<string>().add(Tsrv.globalVar.fieldName.ID)
    };
  };
}
export interface I_conf extends T_conf {}
export {
  Clipboard,
  Grid,
  I_M2OList,
  I_SLCList,
  I_editor,
  I_storeData,
  I_tableBehavior,
  MenuChildOption,
  MenuFirstOption,
  N_oBaseGrid,
  N_oInteraction,
  RowInfo,
  Sortable,
  T_conf,
  T_editor,
  T_srv,
  Tsrv,
  axios,
  filterModal,
  gridFlowchart,
  ifs,
  oModal,
  oToolbar,
  rowEditModal,
  ts,
  tvs,
  vue,
  vxeConfig
};
